Niniejszy raport jest efektem prac zespołu nad zbiorem danych dotyczących aktywności fizycznych rejestrowanych przy pomocy telefonu. Zbiór ten jest szczegółowo opisany w następnym paragrafie. (Link do zbioru)
Celem projektu było sprawdzenie, czy z samych danych naturalnie wynika ich podział na \(6\) grup tak, jak to wynika z metody ich pozyskania.
Analizowane dane to zbiór \(561\) kolumn po \(10299\) obserwacji. Reprezentują one zebrane sygnały od \(30\) wolontariuszy i wolontariuszkek, z których każda osoba wykonywała \(6\) czynności:
1. Chodzenie po płaskiej powierzchni,
2. Chodzenie po schodach w górę,
3. Chodzenie po schodach w dół,
4. Siadanie,
5. Wstawanie,
6. Kładzenie się.
Każda z nich wykonywana była przez około \(1\) minutę i \(15\) sekund. W czasie ich wykonywania testerzy posiadali przyczepiony do pasa telefon komórkowy, którym wykonywane były pomiary za pomocą akcelerometru oraz żyroskopu. Wideo pokazujące przykładowy pomiar można obejrzeć tutaj.
Następnie dane pocięte zostały na \(2.56\) sekundowe fragmenty (nazwane oknami - ang. windows) nakładające się na siebie. Na tych właśnie fragmentach policzone zostały różne statystyki, m.in. średnia, mediana, maksimum, minimum, odchylenie standardowe, miara energii (Energy measure), suma kwadratów podzielona przez liczbę wartości, entropia (Signal entropy) i wiele innych. Na koniec statystyki te zostały jeszcze przeskalowane. Tak powstało \(265\) kolumn danych. Następne \(289\) powstało podobnie z tą różnicą, że każde z okien zostało przetworzone algorytmem Szybkiej Transformaty Fouriera (FFT). Ostatnie \(7\) natomiast, jest to kąt między wektorem grawitacji, a mierzonym parametrem.
Ze względu na wielkość danych postanowiono podjąć próbę zmniejszenia ich wymiarów za pomocą algorytmu PCA.
Po przeskalowaniu danych za pomocą PCA wyraźnie można zauważyć podział zbioru na \(2\) grupy:
1. Grupa pierwsza:
a) Chodzenie po płaskim,
b) Chodzenie po schodach w górę,
c) Chodzenie po schodach w dół,
2. Grupa druga:
a) Siadanie,
b) Wstawanie,
c) Kładzenie się.
Co jednak napawa pesymizmem, nie wygląda na to, żeby wewnątrz tych grup łatwo było je od siebie rozróżnić.
Ponadto można zaobserwować, że czynności z pierwszej grupy wydają się łatwiejsze w odróżnieniu niż te z drugiej. Okazuje się jednak, że na wykresie pierwszej kolumny z czwartą można zyskać odwrotne przekonanie, co widać poniżej:
W celu uzyskania innej perspektywy w spojrzeniu na rozmieszczenie punktów w przestrzeni, zdecydowaliśmy się spojrzeć na te dane po wykonaniu na nich algorytmu t-SNE, który służy do zrzutowania wektorów wielowymiarowych na mniejszą liczbę wymiarów w taki sposób, żeby zachować wzajemne rozmieszczenie punktów.
Ponieważ t-SNE jest dość kosztowne obliczeniowo, wybraliśmy losowo \(1000\) wierszy oraz \(30\) pierwszych kolumn z PCA.
Być może dało by się wydzielić grupę pierwszych trzech czynności od drugiej trójki, widac też dość dobrze skupioną czynność nr \(6\). Jednak ten wykres nie napawa zbytnim optymizmem. Należy jednak zwrócić uwagę, że nie są to pełne dane.
W naszych eksperymentach postanowiliśmy badać jedynie przygotowaną wcześniej część testową danych (podział na zbiory test i train został wprowadzony przez autorów zbioru), który stanowi około \(30\%\) wszytskich rekordów. Wzięliśmy pierwsze \(100\) kolumn po PCA, ponieważ odpowiadają one aż za \(77\%\) wariancji.
Algorytm k-means ustala centroidy, względem których ustalana jest przynależność punktów do klastrów.
Metoda łokcia i miara silhouette dla sprawdzenia, czy z danych wynika, że \(6\) powinno być dobrą ilościa klastrów:
Jak widzimy na wykresie łokcia, dla \(k\ =\ 8\) algorytm bardzo gubi się i podział nie jest leprzy od wcześniej wykonanego, czyli dla \(k\ =\ 7\). Jest to znak, że powinniśmy rozwarzać \(k\ < 8\), gdyż potem dzieje się coś niedobrego.
Sprawdźmy jak wygląda podział na \(8\) klastrów i czemu jest on taki słaby:
Widzimy więc, że algorytm nie zdecydował się na podział typu \(4-4\), lecz na \(2-6\), co miało swój efekt w niskich wynikach jakości rozwiązania.
Następujący wykres przedstawia rozłożenie zmodelowanych klastrów
Na tym wykresie widzimy rozłożenie w oryginalnych danych
Silhouette:
## [1] 0.1211752
DB score:
## [1] 2.387466
Dunn index:
## [1] 0.1349831
Indeksy FM i AR (podobieństwo do “prawdziwego podziału”):
## [1] 0.6188029
## [1] 0.541395
Genie to algorytm aglomeracyjny, czyli opiera swoje działanie na iteracyjnym łączeniu za sobą mniejszych klastrów w większe skupiska. Jego autorzy podkreślają też jego szybkość działania.
Metoda łokcia i miara silhouette dla sprawdzenia, czy z danych wynika, że \(6\) powinno być dobrą ilościa klastrów:
Nieprawdą byłoby stwierdzenie, że wykres ten sugeruje wybór \(k\ =\ 6\). Jednakże na pewno go nie odradza.
Następujący wykres przedstawia rozłożenie zmodelowanych klastrów
Na tym wykresie widzimy rozłożenie w oryginalnych danych Silhouette:
## [1] 0.1404017
DB score:
## [1] 2.854378
Dunn index:
## [1] 0.2199702
Indeksy FM i AR (podobieństwo do “prawdziwego podziału”):
## [1] 0.7149085
## [1] 0.6436648
Skoro wyszstkie algorytmy według miary silhouette informują nas, że najbardziej optymalnym jest podział tego zbioru na \(2\) grupy, to spróbujmy równiez tego podziału. Podzielmy najpierw zbiór na \(2\), zgodnie z propozycją algorytmów.
Zauważmy, iż podział ten, zgodnie z oczekiwani, jest porównywalny z oryginalnym podziałem według czynności:
Grupie o indeksie \(1\) odpowiadają czynności siadania, wstawania oraz leżenia. Grupie o indeksie \(2\) odpowiadają czynności chodzenia po płaskim, chodzenia po schodach w górę oraz chodzenia po schodach w dół.
Sprawdźmy jaki podział każdej z tych części jest optymalny:
Wygląda więc na to, że zbiór ten powinien być podzielony na \(2\) części, ale następny w kolejce jest podział na \(3\). Przyjżyjmy się proponowanemu podziałowi.
Jest on trochę podobny do oryginalnego, szczególnie klaster \(3\) jest podobny do czynności leżenia.
Podział ten w żadnym stopniu nie przypomina tego, czego oczekiwaliśmy.
W dalszej części raportu opisujemy podział zbioru za pomocą algorytmu Gaussian Mixture Models.
Tak samo jak we wcześniejszych wykresach tego typu - nieprawdą byłoby stwierdzenie, że wykres ten sugeruje wybór \(k\ =\ 6\). Jednakże na pewno go nie odradza. Jest to ostatni moment, kiedy wynik spada o \(50000\), a potem już o co najwyżej \(~25000\), czyli \(50\%\) mniej.
Wykres ten uparcie wciąż sugeruje, żeby zdecydować się na podział na \(2\) kalstry. Gdybyśmy jednak uparcie chciali podzielić na większą ich ilość, to, na podstawie tego wykresu można wnioskować, że dobrym pomysłem byłby wybór \(6\) lub \(7\) klastrów.
Metoda GMM dla wyboru random_spread i metryki euklidesowej.
Silhouette:
## [1] 0.1260754
DB score:
## [1] 2.713602
Dunn index:
## [1] 0.1465879
Indeksy FM i AR (podobieństwo do “prawdziwego podziału”):
## [1] 0.4848875
## [1] 0.3762544
Dla porównania prezentujemy metod GMM dla wyboru random_spread i metryki Manhattan.
Silhouette:
## [1] 0.1477339
DB score:
## [1] 1.750563
Dunn index:
## [1] 0.1573143
Indeksy FM i AR (podobieństwo do “prawdziwego podziału”):
## [1] 0.4566879
## [1] 0.2895716
Metoda GMM dla wyboru random_subset i metryki euklidesowej. Metryka Manhattan wykonuje się jeszcze gorzej, więc opuścimy jej przedstawaienie.
Silhouette:
## [1] 0.1209228
DB score:
## [1] 2.530765
Dunn index:
## [1] 0.1284906
Indeksy FM i AR (podobieństwo do “prawdziwego podziału”):
## [1] 0.491171
## [1] 0.3824514
Metoda GMM dla wyboru static_spread i metryki euklidesowej. Metryka Manhattan wykonuje się jeszcze gorzej, więc opuścimy jej przedstawaienie.
Silhouette:
## [1] 0.1014939
DB score:
## [1] 2.616788
Dunn index:
## [1] 0.1416974
Indeksy FM i AR (podobieństwo do “prawdziwego podziału”):
## [1] 0.5027006
## [1] 0.3812041
Metoda GMM dla wyboru static_subset i metryki Manhattan. Jest to model osiągający najlepsze wyniki spośród modeli GMM.
Silhouette:
## [1] 0.1477146
DB score:
## [1] 2.179408
Dunn index:
## [1] 0.1175192
Indeksy FM i AR (podobieństwo do “prawdziwego podziału”):
## [1] 0.5734906
## [1] 0.4686055
GMM z wyborem static_subset i metryką Manhattan osiągnął najlepsze wyniki. Również dobrze poradził sobie random_spread z metryką euklidesową. pozostałe algorytmy dzieliły zbiór na \(6\) klastrów nierównomiernie.
Podział na \(6\) klastrów nie jest łątwy do osiągnięcia. Klastry nachodzą na siebie, niezawsze są wyraźnie rozgraniczone, trudno jest też znaleźć ich bardziej zagęszczone miejsca. Najlepiej poradził sobie algorytm genie, nawet pomimo faktu, że podzielił klastry nierównomiernie (tzn. 2-4, a nie 3-3). Podział na \(2\) z kolei jest bardzo oczywisty, widoczny nawet gołym okiem. Algorytmy nie miały problemów z rozdzieleniem dwóch grup czynności.
Oświadczamy, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu “Wstęp do Uczenia Maszynowego” została wykonana przez nas samodzielnie.
Przemysław Adam Chojecki, 298814
Michał Wdowski, 298848